from django.db import models
# 导入django自带的时间模块
from django.utils import timezone
# 导入用户表模块
from django.contrib.auth.models import AbstractUser


# 基类表
class Base(models.Model):
    is_delete = models.IntegerField(default=0)  # 是否删除：默认0：未删除，1：已删除
    create_time = models.DateTimeField(default=timezone.now, null=True)  # 添加数据时，自动写入当前添加时间

    class Meta:
        ''' abstract = True 此类不可生成对象，必须被继承使用。
        Abstract可以将子类的共性最大限度的抽取出来，
        放在父知类中，以提高程序的简洁性。'''
        abstract = True


# 公司表
class Company(Base):
    name = models.CharField(max_length=200)  # 公司名字
    town = models.CharField(max_length=200)  # 城市
    street = models.CharField(max_length=200)  # 街道
    logo = models.CharField(max_length=200)  # 公司logo

    class Meta:
        db_table = 'company'


# 权限表
class Power(Base):
    pname = models.CharField(max_length=200)  # 权限名称

    class Meta:
        db_table = 'power'


# 用户表
class User(AbstractUser):
    username = models.CharField(max_length=200, unique=True)  # 用户名
    password = models.CharField(max_length=200)  # 密码
    email = models.CharField(max_length=200, null=True)  # 邮箱
    phone = models.CharField(max_length=11)  # 手机号
    photo = models.CharField(max_length=200, default='1.jpg')  # 头像
    company = models.IntegerField()  # 所属公司
    auditing = models.IntegerField(default=0)  # 审核状态(0：待审核，1：审核通过，2：审核失败)
    refuse = models.CharField(max_length=200, null=True)  # 审核失败原因
    is_delete = models.IntegerField(default=0)  # 是否存档0：未存档，1：已存档

    class Meta:
        db_table = 'user'


# 用户权限关系表
class UserPower(Base):
    uid = models.IntegerField()  # 用户id
    pid = models.IntegerField()  # 权限id

    class Meta:
        db_table = 'user_power'


# 标签信息表
class Tag(Base):
    tag_id = models.CharField(max_length=12)  # 标签名
    create_uid = models.IntegerField()  # 创建人id
    fen_uid = models.IntegerField()  # 分配用户id
    fix_id = models.IntegerField()  # 货物类型id
    update_time = models.DateTimeField(null=True)  # 更新时间
    status = models.IntegerField(default=0)  # 0：默认使用中，1：已使用，2：已归档

    class Meta:
        db_table = 'tag'


# 设备表
class Genre(Base):
    name = models.CharField(max_length=200)  # 设备名称

    class Meta:
        db_table = 'genre'


# 报警类型表
class Warn(Base):
    name = models.CharField(max_length=200)  # 报警名
    fix_id = models.IntegerField()  # 货物id
    min_temp = models.CharField(max_length=200, null=True)  # 温度下限
    max_temp = models.CharField(max_length=200, null=True)  # 温度上限
    doorsill = models.CharField(max_length=200, null=True)  # 阈值，设定多久后报警，单位：秒

    class Meta:
        db_table = 'warn'


# 货物类型表
class Fixing(Base):
    genre_id = models.IntegerField()  # 设备类型id
    name = models.CharField(max_length=200)  # 货物名
    desc = models.TextField()  # 货物描述
    delay_time = models.IntegerField()  # 单位秒   延迟开始
    ent_time = models.IntegerField()  # 单位秒   记录间隔
    min_temp = models.CharField(max_length=200)  # 理想最低温度
    max_temp = models.CharField(max_length=200)  # 理想最高温度
    update_time = models.DateTimeField(null=True)  # 更新时间

    class Meta:
        db_table = 'fixing'


# 温度表
class Temperature(Base):
    order_id = models.IntegerField()  # 运单号
    tempera = models.FloatField(max_length=200)  # 记录温度

    class Meta:
        db_table = 'temperature'
        unique_together = (
            ('order_id', 'create_time')
        )


# 运单表
class Order(Base):
    ordername = models.CharField(max_length=200)  # 运单号
    cust_uid = models.IntegerField()  # 客户id
    tag_id = models.IntegerField(null=True)  # 标签id
    start_time = models.DateTimeField(null=True)  # 运单开始时间
    end_time = models.DateTimeField(null=True)  # 运单结束时间
    send_add = models.CharField(max_length=200,null=True)   # 发货地址经纬度
    start_add = models.CharField(max_length=200,null=True)  # 发货地
    take_add = models.CharField(max_length=200,null=True)   # 收货地址经纬度
    end_add = models.CharField(max_length=200,null=True)    # 收货地
    temp_log = models.CharField(max_length=200,default='正常') # 温度记录 正常，报警
    cond = models.IntegerField(default=0)  # 0：待使用，1：在途中，2：已完成

    class Meta:
        db_table = 'order'


# 发货地址
class SendAddress(Base):
    start_code = models.CharField(max_length=200,null=True)   # 发货地编码
    start_add = models.CharField(max_length=200)  # 发货地址

    class Meta:
        db_table = 'send_address'

class TakeAddress(Base):
    take_code = models.CharField(max_length=200,null=True)    # 收货编码
    send_code = models.CharField(max_length=200)     # 发货地址编码
    end_code = models.CharField(max_length=200,null=True)  # 收货地址编码
    end_add = models.CharField(max_length=200)   # 收货地址

    class Meta:
        db_table = 'take_address'
        unique_together = (
            ('send_code','take_code')
        )

# 客户表
class Customer(Base):
    cname = models.CharField(max_length=200)  # 客户名称
    address = models.CharField(max_length=200)  # 公司地址
    uname = models.CharField(max_length=200)  # 联系人
    phone = models.CharField(max_length=11)  # 联系电话

    class Meta:
        db_table = 'customer'
